<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

include_once('ExceptionDAO.php');
include_once 'util/MapError.php';
include_once 'TOVenda.php';

/**
 * DAO para operações de banco para venda do item
 * @author Douglas Rafael
 * @package models
 */
class DAOVenda extends CI_Model {

    /**
    * Método para <b>Listar</b> as vendas do item de acordo com o código
    * @param type $codigo
    * @param type $init
    * @param type $quant
    * @return array retorna um array de TOVenda
    * @throws ExceptionDAO 
    */
    public function get($codigo, $init, $quant) {
        try {
            $this->db->where('item_preco_codigo', $codigo);
            $this->db->order_by('id', 'ASC');
            $result = $this->db->get('venda', $quant, $init);

            $vendas = array();
            if ($result){
                foreach ($result->result() as $value){
                    $venda = new TOVenda();
                    $venda->codigo = $value->id;
                    $venda->data_venda = $value->data_venda;
                    $venda->valor_venda = $value->valor_venda;
                    $venda->quantidade = $value->quantidade;
                    $venda->status_pagamento = $value->status_pagamento;
                    $venda->data_pag_agendado = $value->data_pag_agendado;
                    
                    $this->load->model('DAOAdmin');
                    $venda->admin = new TOAdmin();
                    $venda->admin = $this->DAOAdmin->getAdmin($value->usuario_admin_id);
                    
                    array_push($vendas, $venda);
                }
                
                return $vendas;
            }
        } catch (Exception $e) {
            $num = $this->db->_error_number();
            $msg = $this->db->_error_message();

            //Traduz o tipo de erro de acordo com $num
            $erro = new MapError();
            throw new ExceptionDAO($erro->getError($num, $msg));
        }
    }
    
    /**
     * Retorna o total de vendas de acordo com o a tabela de precos
     * @param type $codigo
     * @return type 
     */
    public function quant_get($codigo){
        $this->db->where('item_preco_codigo', $codigo);
        return $this->db->count_all_results('venda');
    }
    
    /**
     * Retorna o total de vendas geral
     * @param type $codigo
     * @return type 
     */
    public function quant_get_all(){
        return $this->db->count_all_results('venda');
    }

}